home *** CD-ROM | disk | FTP | other *** search
/ Die Speccy' 97 / Die Speccy' 97.iso / amiga_system / the_aminet / dev / amos / apme14.lzh / PatchAMOSPro.e.old < prev    next >
Text File  |  1992-02-27  |  3KB  |  157 lines

  1. /* Patches AMOSPro to load it's envoironment from 
  2.    T:AMOSPro_Interpreter_Config, then if that fails,
  3.    S:AMOSPro_Interpreter_Config
  4. */
  5.  
  6. /* V1.1 changes 
  7.  
  8.  * Filename may be on command line 
  9.  
  10.  * Exception Handlers now used for errors
  11.  
  12. */
  13.  
  14.  
  15. /* V1.2 changes
  16.  
  17.  * Now recognises & patches AMOS Pro V2.00 & V1.12
  18.  
  19.  * Rejects other versions
  20.  
  21.  * Re-written error messages
  22.  
  23. */
  24.  
  25. /* V1.3 Changes
  26.  
  27.  * Addresses patched in AMOSPro V.2 were wrong.
  28.  
  29.  * Memory allocation bug fixed.
  30.  
  31. */
  32.  
  33.  
  34. MODULE 'ReqTools','libraries/reqtools','utility/tagitem','Dos/Dos'
  35.  
  36. ENUM    ER_OPEN=20,ER_READ,ER_WRITE,FR_LIB,FR_ALLOC,ER_VERSION
  37.  
  38. CONST    RW_ERR=-1
  39.  
  40. RAISE ER_OPEN IF Open()=NIL
  41. RAISE ER_READ IF Read()=RW_ERR
  42. RAISE ER_WRITE IF Write()=RW_ERR
  43. RAISE ER_OPEN IF FileLength()=RW_ERR
  44.  
  45. DEF quitstring[5]:STRING
  46.  
  47. PROC main() HANDLE
  48.  
  49.   DEF file=0
  50.   DEF poss,post
  51.   DEF filename[256]:STRING
  52.  
  53.   quitstring := 'Quit'
  54.   getTheArg(filename)
  55.  
  56.   IF FileLength(filename)=22624
  57.     /* AMOSPro V2.0 */
  58.       poss := $518E
  59.       post := $51AB
  60.   ELSE
  61.     IF FileLength(filename)=115972
  62.       /* AMOSPro V1.12 */
  63.       poss := $fd0
  64.       post := $fed
  65.     ELSE
  66.       Raise(ER_VERSION)
  67.     ENDIF
  68.   ENDIF
  69.  
  70.   file := Open(filename,MODE_OLDFILE)
  71.   
  72.   Seek(file,post,-1)
  73.   Write(file,'T:',1)
  74.   Seek(file,poss,-1)
  75.   Write(file,'S:',1)
  76.  
  77.   Close(file)
  78.   WriteF('Patching completed OK')
  79.  
  80. EXCEPT
  81.  
  82. SELECT exception
  83.  
  84.   CASE ER_OPEN;      request('Error: Could Not Open AMOSPro File',quitstring,NIL)
  85.   CASE ER_READ;      request('Error: Could Not Read from AMOSPro File',quitstring,NIL)
  86.   CASE ER_WRITE;     request('Error: Could Not Write to AMOSPro File',quitstring,NIL)
  87.   CASE ER_VERSION;   request('Error: Not V1.12 or V2.00 of AMOSPro',quitstring,NIL)
  88.   DEFAULT;         request('Error: An I/O Error has occured',quitstring,NIL)
  89.  
  90. ENDSELECT
  91.  
  92.  
  93.  
  94. ENDPROC
  95.  
  96.  
  97.  
  98. PROC filereq(dirbuf) HANDLE
  99.  
  100.   RAISE FR_LIB IF OpenLibrary()=NIL
  101.   RAISE FR_ALLOC IF RtAllocRequestA()=NIL
  102.  
  103.   CONST FILEREQ=0,REQINFO=1
  104.  
  105.   DEF filebuf[120]:STRING
  106.   DEF req:PTR TO rtfilerequester
  107.   DEF tempstr[1]:STRING
  108.  
  109.   reqtoolsbase:=OpenLibrary('reqtools.library',37)
  110.   req:=RtAllocRequestA(FILEREQ,0)
  111.   filebuf := 'AMOSPro'
  112.   RtChangeReqAttrA(req,[RTFI_DIR,'AMOSPro_System:',TAG_DONE])
  113.   IF RtFileRequestA(req,filebuf,'Select your AMOSPro file',0)=FALSE THEN CleanUp(5)
  114.  
  115.   StrCopy(dirbuf,req.dir,ALL)
  116.   RtFreeRequest(req)
  117.  
  118.   RightStr(tempstr,dirbuf,1)
  119.   IF StrCmp(tempstr,':',1)=FALSE THEN StrAdd(dirbuf,'/',ALL)
  120.   StrAdd(dirbuf,filebuf,ALL)
  121.  
  122.   CloseLibrary(reqtoolsbase)
  123.  
  124. EXCEPT
  125.  
  126. SELECT exception
  127.   CASE FR_LIB;     request('Error: Could Not Open Reqtools Library',quitstring,NIL)
  128.   CASE FR_ALLOC;   request('Error: Could Not Open File Requester',quitstring,NIL)    
  129.   DEFAULT;       Raise(exception)
  130. ENDSELECT
  131.   
  132.  
  133. ENDPROC 
  134.  
  135.  
  136.  
  137.  
  138.  
  139. PROC getTheArg(filename)
  140.  
  141. IF arg [] > 0
  142.   IF (arg[0] = '"') AND (arg[StrLen(arg)-1] = '"')
  143.     
  144.     MidStr(filename,arg,1,StrLen(arg)-2)
  145.   ELSE
  146.     StrCopy(filename,arg,ALL)
  147.   ENDIF
  148. ELSE
  149.   filereq(filename)
  150. ENDIF
  151.  
  152. IF filename[0]=0 THEN CleanUp(20)
  153.     
  154. ENDPROC
  155.  
  156. PROC request(body,gadgets,args)
  157. ENDPROC EasyRequestArgs(0,[20,0,'Patch AMOSPro V1.3',body,gadgets],0,args)